/**
 * Spring 標籤綁定需要一個 BindException 物件，所以這次使用了 onSumit() 的另一個版本，當驗證失敗時，在 BindException 中使用 reject() 方法，<br>
 * 表示拒絕接受這次輸入的數據，reject( )接受兩個參數，第一個是 error code，如果您有設定 MessageSource（參考3.3.2），<br>
 * 這會到您設定的 .properties 檔中依 error code 為鍵（Key），以找出相對應的訊息，如果沒有設定 MessageSource，則使用第二個參數所設定的值作為錯誤訊息輸出。<br>
 * <br>
 * errors 的 getModel() 方法返回一個 Map 物件，之前使用 reject() 所儲存的錯誤訊息就包括在這個物件中，將之設定給 ModelAndView，<br>
 * 這之後會處理為綁定訊息以在標籤上輸出。剩下的未呈現JSP網頁、類別與定義檔等，都與 SimpleFormController 相同，<br>
 * 如果登入錯誤，則會顯示以下的內容，數據綁定標籤將錯誤訊息與之前輸入的資料顯示在對應的標籤上。
 */

package view.bind;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import com.e885.log.E885Logger;
import common.UserCommand;

/**
 * @author Eric.Kao(gau168.gau@msa.hinet.net)
 * @version 1.0
 * @company E885 Group
 * @copyright Copyright (c) 2001-2008
 */

public class LoginSimpleFormController extends SimpleFormController
{

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.web.servlet.mvc.SimpleFormController#onSubmit(java.lang.Object,
	 *      org.springframework.validation.BindException)
	 */
	@Override
	protected ModelAndView onSubmit( Object command, BindException errors ) throws Exception
	{
		UserCommand userCommand = ( UserCommand )command;

		String name = userCommand.getName();
		String password = userCommand.getPassword();

		E885Logger.testLog.info( "name:[" + name + "]" );
		E885Logger.testLog.info( "password:[" + password + "]" );

		// 判斷使用者的帳號和密碼是否正確, 因為這邊是範例, 所以只有一個邏輯判斷, 正確的做法要連結到資料庫
		if( name.equals( "eric.kao" ) && password.equals( "1234" ) )
			return new ModelAndView( getSuccessView(), "user", name );
		else
		{
			errors.reject( "loginFailure", "帳號或密碼錯誤" );

			return new ModelAndView( getFormView(), errors.getModel() );
		}

	}
}
